﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using transportsystem.DTO;
using transportsystem.BUS;

namespace transportsystem
{
    public partial class frmLichTrinh : Form
    {
        DataTable dt;
        DataTable dtDaiLy;
        DataTable dtDaiLy2;
        bool hideControls = true;
        int iIndex = 0;
        int iIndex2 = 0;
        int gio = 0;
        int phut = 0;
        bool addNew = false;

        public frmLichTrinh()
        {
            InitializeComponent();
        }

        private void frmLichTrinh_Load(object sender, EventArgs e)
        {
            LoadData();
        }
        void HideAddNew(bool value)
        {
            if (value == true)
                pnlAddNew.Visible = false;
            else
                pnlAddNew.Visible = true;
        }

        public void SetDataGridTitle()
        {
            string[] a = new string[2] { "Mã lịch trình", "Mô tả" };
            for (int i = 0; i < a.Count(); i++)
                dgv.Columns[i].HeaderText = a[i];
        }

        public void LoadData()
        {
            HideAddNew(hideControls);
            dt = LichTrinhBUS.layDanhSachLichTrinh();
            if (dt != null && dt.Rows.Count > 0)
            {
                dgv.DataSource = dt;
                iIndex = 0;
                SetDataGridTitle();
                SetValueToControls();

                DataTable kv = DaiLyBUS.getKhuVucList();
                if (kv != null && kv.Rows.Count > 0)
                {
                    cmbKhuVuc.DataSource = kv;
                    cmbKhuVuc.DisplayMember = "khuvuc";
                    cmbKhuVuc.ValueMember = "khuvuc";
                    string tenkv = cmbKhuVuc.SelectedValue.ToString();
                    if (tenkv != "")
                        GetDaiLyByKhuVuc(tenkv);
                }
            }
        }

        public void GetDaiLyByKhuVuc(string tenKhuVuc)
        {
            DataTable dl = DaiLyBUS.getDaiLyTheoKhuVucList(tenKhuVuc);
            if (dl != null && dl.Rows.Count > 0)
            {
                cmbDaiLy.DataSource = dl;
                cmbDaiLy.DisplayMember = "tendaily";
                cmbDaiLy.ValueMember = "madaily";
            }
        }

        public void GetDaiLyByLichTrinh(int maLichTrinh)
        {
            DataSet danhsachdaily = DaiLyLichTrinhBUS.layDanhSachDaiLyTheoLichTrinh(maLichTrinh);
            dtDaiLy = danhsachdaily.Tables[0];
            if (dtDaiLy != null && dtDaiLy.Rows.Count > 0)
            {
                dgvDaiLy.DataSource = dtDaiLy;
                string[] a = new string[6] { "Mã đại lý", "Tên đại lý", "Địa chỉ", "Số điện thoại", "Khu vực", "Thời gian qua" };
                for (int i = 0; i < a.Count(); i++)
                    dgvDaiLy.Columns[i].HeaderText = a[i];
                SetDateTimeValue();
            }

            dtDaiLy2 = danhsachdaily.Tables[1];
            if (dtDaiLy2 != null && dtDaiLy2.Rows.Count > 0)
            {
                dgvDaiLy2.DataSource = dtDaiLy2;
                string[] a = new string[6] { "Mã đại lý", "Tên đại lý", "Địa chỉ", "Số điện thoại", "Khu vực", "Thời gian qua" };
                for (int i = 0; i < a.Count(); i++)
                    dgvDaiLy2.Columns[i].HeaderText = a[i];
                SetDateTimeValue();
            }
        }

        public void SetValueToControls()
        {
            if (dt.Rows.Count > 0)
            {
                txtMaLichTrinh.Text = dt.Rows[iIndex]["malichtrinh"].ToString().Trim();
                txtMoTa.Text = dt.Rows[iIndex]["mota"].ToString().Trim();
                int maLichTrinh = int.Parse(txtMaLichTrinh.Text);
                GetDaiLyByLichTrinh(maLichTrinh);
                lblCount.Text = "Hiện có " + dgv.Rows.Count.ToString() + " lịch trình.";
            }
        }

        public void SetDateTimeValue()
        {
            DateTime d;
            if (iIndex2 != -1)
                d = DateTime.Parse(dtDaiLy.Rows[iIndex2]["thoigianqua"].ToString());
            else
                d = DateTime.Today;
            dtpNgay.Value = d;
            nudGio.Value = d.Hour;
            nudPhut.Value = d.Minute;
        }

        private void chkHideControls_CheckedChanged(object sender, EventArgs e)
        {
            hideControls = !hideControls;
            HideAddNew(hideControls);
        }

        private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                addNew = false;
                ShowDetail(addNew);
                iIndex = e.RowIndex;
                SetValueToControls();
            }
        }

        private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                addNew = false;
                ShowDetail(addNew);
                iIndex = e.RowIndex;
                SetValueToControls();
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            chkHideControls.Checked = true;
            hideControls = !chkHideControls.Checked;
            HideAddNew(hideControls);
            addNew = true;
            ShowDetail(addNew);
            AddNewPrepair();
        }

        public void ShowDetail(bool k)
        {
            grbThongTin.Enabled = !k;
        }

        private void AddNewPrepair()
        {
            txtMaLichTrinh.Text = "";
            txtMoTa.Text = "";
        }
        public void Save()
        {
            LichTrinh lt = new LichTrinh();
            if (addNew == false)
                lt.Malichtrinh = int.Parse(txtMaLichTrinh.Text);

            lt.Mota = txtMoTa.Text;
            ShowDetail(addNew);

            bool kq = LichTrinhBUS.capNhatLichTrinh(lt);

            if (kq == true)
                MessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                MessageBox.Show("Có lỗi xảy ra! Vui lòng thử lại", "Thông báo", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
            LoadData();
            addNew = false;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            this.Save();
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn muốn xóa lịch trình này không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                if (addNew == false)
                {
                    LichTrinh lt = new LichTrinh();
                    lt.Malichtrinh = int.Parse(txtMaLichTrinh.Text.Trim());
                    LichTrinhBUS.xoaLichTrinh(lt);
                    LoadData();
                }
            }
        }

        private void cmbKhuVuc_SelectedIndexChanged(object sender, EventArgs e)
        {
            string tenkv = cmbKhuVuc.SelectedValue.ToString();
            if (tenkv != "")
                GetDaiLyByKhuVuc(tenkv);
        }

        private void btnAddNew_Click(object sender, EventArgs e)
        {
            int maDaiLy = int.Parse(cmbDaiLy.SelectedValue.ToString());
            int flag = 1;
            for (int i = 0; i < dtDaiLy.Rows.Count; i++)
                if (int.Parse(dtDaiLy.Rows[i]["madaily"].ToString()) == maDaiLy)
                    flag = 0;
            if (flag == 0)
                MessageBox.Show("Đại lý này đã có trong lịch trình. Vui lòng chọn đại lý khác!");
            else
                AddNewDetail(0, maDaiLy);
        }

        private void dgvDaiLy_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            iIndex2 = e.RowIndex;
            SetDateTimeValue();
        }

        private void dgvDaiLy_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            iIndex2 = e.RowIndex;
            SetDateTimeValue();
        }

        public void AddNewDetail(int action, int maDaiLy)
        {
            gio = int.Parse(nudGio.Value.ToString());
            phut = int.Parse(nudPhut.Value.ToString());

            DateTime d = new DateTime(dtpNgay.Value.Year, dtpNgay.Value.Month, dtpNgay.Value.Day, gio, phut, 0);

            DaiLyLichTrinh dllt = new DaiLyLichTrinh();
            dllt.Malichtrinh = int.Parse(txtMaLichTrinh.Text);
            dllt.Madaily = maDaiLy;
            dllt.Thoigianqua = d;
            bool i = DaiLyLichTrinhBUS.capNhatDaiLyLichTrinh(dllt, action);

            if (i == true)
                if (action == 0)
                    MessageBox.Show("Thêm mới thành công");
                else
                    MessageBox.Show("Cập nhật thành công");
            else
                MessageBox.Show("Có lỗi xảy ra! Vui lòng thử lại");
            int maLichTrinh = int.Parse(txtMaLichTrinh.Text);
            GetDaiLyByLichTrinh(maLichTrinh);
        }

        private void btnS_Click(object sender, EventArgs e)
        {
            int maDaiLy = int.Parse(dtDaiLy.Rows[iIndex2]["madaily"].ToString());
            AddNewDetail(1, maDaiLy);
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn muốn xóa đại lý này ra khỏi lịch trình không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                DaiLyLichTrinh dllt = new DaiLyLichTrinh();
                dllt.Madaily = int.Parse(dtDaiLy.Rows[iIndex2]["madaily"].ToString());
                dllt.Malichtrinh = int.Parse(txtMaLichTrinh.Text);

                bool i = DaiLyLichTrinhBUS.xoaDaiLyLichTrinh(dllt);

                if (i == true)
                    MessageBox.Show("Xóa thành công");
                else
                    MessageBox.Show("Có lỗi xảy ra! Vui lòng thử lại");
                int maLichTrinh = int.Parse(txtMaLichTrinh.Text);
                iIndex2 = -1;
                GetDaiLyByLichTrinh(maLichTrinh);
            }
        }
    }
}
